package demo1;

//定义一个父类/基类/超类
class Animal {
    public String name;
    public int age;

    static {
        System.out.println("Animal静态代码块");
    }
    {
        System.out.println("Animal构造代码块！");
        //这个是在类里面的，所以是构造代码块
        //如果放在实例代码块，那么这个就是普通代码块
    }

    public Animal() {
        System.out.println("不带参数的Animal");
    }
    public Animal(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }
}
//定义一个狗这个类
class Dog extends Animal {

   /* public String name;
    public int age;

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }*/
    public int v;

    public Dog() {
        System.out.println("不带参数的构造方法,Dog");
        //下面我们创建的对象是不带参数的，所以我们的父类也需要一个不带参数的构造方法
    }
    static {
        System.out.println("Dog静态代码块");
    }
    {
        System.out.println("Dog实例代码块");
    }
    //子类构造方法
    public Dog(String name,int age,int v) {
        //在父类中写上一个构造方法之后我们没有进行初始化，我们子类就会报错，所以我们要先通过子类对父类的成员变量进行初始化之后，我们的子类就不会报错了
        //这个就是我们初始化的是父类的成员变量
        super(name,age);//帮助子类的构造方法来初始化成员变量
        this.v = v;//初始化子类的成员变量
    }
    public void bark() {
        System.out.println(this.name + "正在旺旺旺！！！");
    }
}
class Cat extends Animal {

    public Cat() {
        /*super("hehe",15);*/
        System.out.println("Cat不带参数的构造方法");
    }
    /*public String name;
    public int age;

    public void eat() {
        System.out.println(this.name + "正在吃饭");
    }*/
    //上面都是Dog和Cat两个类共有的，所以我们可以将他们抽取出来，写一个父类出来
    public void mew() {
        System.out.println(this.name + "正在喵喵喵！！！");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Dog dog = new Dog();
        System.out.println("=========");
        Cat cat = new Cat();
    }
    public static void main11(String[] args) {
        Dog dog = new Dog();//这里调用的是不带参数的
        dog.age = 10;
        dog.name = "小灰灰";
        dog.eat();
        dog.bark();
        System.out.println("=========");
        Cat cat = new Cat();
        cat.age = 5;
        cat.name = "小白";
        cat.eat();
        cat.mew();
    }
}
